﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Entidades;
using System.Data;

namespace AccesoADatos
{
    public class OfertaDAO
    {
        public static SqlConnection conexion = AccesoBD.getConexion();

        public static void ofertaSave(Oferta oferta)
        {

                conexion.Open();
                string query1 = "INSERT INTO Oferta (titulo,descripcion,fecha_desde,fecha_hasta, "+
                                                   " id_estado,precio_original,descuento,precio_promocional, imagen)";
                query1 += "      VALUES (@titulo, @descripcion, @fecha_desde, @fecha_hasta, "+ 
                                        "@id_estado, @precio_original, @descuento, @precio_promocional, @imagen)";

                SqlCommand cmd = new SqlCommand(query1, conexion);

                cmd.Parameters.AddWithValue("titulo", oferta.titulo);
                cmd.Parameters.AddWithValue("descripcion", oferta.descripcion);
                cmd.Parameters.AddWithValue("fecha_desde", oferta.fechaDesde);
                cmd.Parameters.AddWithValue("fecha_hasta", oferta.fechaHasta);
                cmd.Parameters.AddWithValue("id_estado", oferta.idEstado);
                cmd.Parameters.AddWithValue("precio_original", oferta.precioOriginal);
                cmd.Parameters.AddWithValue("descuento", oferta.descuento);
                cmd.Parameters.AddWithValue("precio_promocional", oferta.precioPromocional);

                SqlParameter param1 = new SqlParameter("@imagen", SqlDbType.Image);
                param1.Value = oferta.imagen;
                cmd.Parameters.Add(param1);

                cmd.ExecuteNonQuery();

                conexion.Close();
            }

        

        public static List<Oferta> getOferta(DateTime? fecha, int? estado)
        {
            List<Oferta> listOferta = new List<Oferta>();
            conexion.Close();
                conexion.Open();

                string query = "SELECT * FROM dbo.OFERTA o ";
                query += " WHERE 1 = 1 ";

                if (estado != null && estado != 0)
                {
                    query += " and o.id_estado = @estado ";
                }

                if (fecha != null )
                {
                    query += " and @fecha between o.fecha_desde and o.fecha_hasta ";
                }

                SqlCommand cmd = new SqlCommand(query, conexion);

                if (estado != null)
                {
                    cmd.Parameters.AddWithValue("estado", estado);
                }
                if (fecha != null)
                {
                    cmd.Parameters.AddWithValue("fecha", fecha);
                }

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {

                    Oferta oferta = new Oferta();
                    oferta.idOferta = Convert.ToInt32(dr["id_oferta"].ToString());
                    oferta.titulo = dr["titulo"].ToString();
                    oferta.descripcion = dr["descripcion"].ToString();
                    oferta.fechaDesde = Convert.ToDateTime(dr["fecha_desde"].ToString());
                    oferta.fechaHasta = Convert.ToDateTime(dr["fecha_hasta"].ToString());
                    oferta.idEstado = Convert.ToInt32(dr["id_estado"].ToString());
                    oferta.precioOriginal = Convert.ToDouble(dr["precio_original"].ToString());
                    oferta.descuento = Convert.ToDouble(dr["descuento"].ToString());
                    oferta.precioPromocional = Convert.ToDecimal(dr["precio_promocional"].ToString());
                    oferta.imagen = (Byte[])dr["imagen"];

                    listOferta.Add(oferta);
                }
                conexion.Close();
                return listOferta;
        }

        public static void OfertaUpdate(Oferta oferta)
        {
           
                conexion.Open();
                string query1 = "UPDATE oferta SET ";

                query1 += "id_estado = @idEstado ";
                if (oferta.titulo != null)
                    query1 += ", titulo = @titulo ";
                if (oferta.descripcion != null)
                    query1 += ", descripcion = @descripcion ";
                if (oferta.fechaDesde != null)
                    query1 += ", fecha_desde = @fechaDesde ";
                if (oferta.fechaHasta != null)
                    query1 += ", fecha_hasta = @fechaHasta ";
                if (oferta.precioPromocional.HasValue)
                    query1 += ", precio_promocional = @precioPromocional ";
                if (oferta.precioOriginal.HasValue)
                    query1 += ", precio_original = @precioOriginal ";
                if (oferta.descuento.HasValue)
                    query1 += ", descuento = @descuento ";
              //  if (oferta.imagen != null)
               //     query1 += "imagen = @imagen ";

                query1 += "WHERE id_oferta = @idOferta";

                SqlCommand cmd = new SqlCommand(query1, conexion);
                cmd.Parameters.AddWithValue("@idOferta", oferta.idOferta);
                cmd.Parameters.AddWithValue("@titulo", oferta.titulo);
                cmd.Parameters.AddWithValue("@descripcion", oferta.descripcion);
                cmd.Parameters.AddWithValue("@fechaDesde", oferta.fechaDesde);
                cmd.Parameters.AddWithValue("@fechaHasta", oferta.fechaHasta);
                cmd.Parameters.AddWithValue("@idEstado", oferta.idEstado);
                cmd.Parameters.AddWithValue("@precioOriginal", oferta.precioOriginal);
                cmd.Parameters.AddWithValue("@descuento", oferta.descuento);
                cmd.Parameters.AddWithValue("@precioPromocional", oferta.precioOriginal);
                //cmd.Parameters.AddWithValue("@imagen", oferta.imagen);

                cmd.ExecuteNonQuery();
            }
          
        

        public static void OfertaDelete(int id)
        {
            try
            {
                conexion.Open();

                string query1 = "DELETE FROM oferta  WHERE id_oferta = @idOferta";

                SqlCommand cmd = new SqlCommand(query1, conexion);
                cmd.Parameters.AddWithValue("idOferta", id);

                cmd.ExecuteNonQuery();
            }
            catch (Exception)
            {
                conexion.Close();
                throw new ApplicationException("Error al eliminar el cliente seleccionado. Consulte con su administrador.");
            }
        }

        public static Oferta getOfertaId(int id)
        {
            Oferta oferta = null;
            conexion.Open();

            string query = "SELECT * FROM dbo.OFERTA o ";
            query += " WHERE o.id_oferta = @idOferta";

            SqlCommand cmd = new SqlCommand(query, conexion);
            cmd.Parameters.AddWithValue("idOferta", id);
            SqlDataReader dr = cmd.ExecuteReader();
            while (dr.Read())
            {

                oferta = new Oferta();
                oferta.idOferta = Convert.ToInt32(dr["id_oferta"].ToString());
                oferta.titulo = dr["titulo"].ToString();
                oferta.descripcion = dr["descripcion"].ToString();
                oferta.fechaDesde = Convert.ToDateTime(dr["fecha_desde"].ToString());
                oferta.fechaHasta = Convert.ToDateTime(dr["fecha_hasta"].ToString());
                oferta.idEstado = Convert.ToInt32(dr["id_estado"].ToString());
                oferta.precioOriginal = Convert.ToDouble(dr["precio_original"].ToString());
                oferta.descuento = Convert.ToDouble(dr["descuento"].ToString());
                oferta.precioPromocional = Convert.ToDecimal(dr["precio_promocional"].ToString());
                //oferta.imagen = dr["imagen"].ToString();

            }
            conexion.Close();
            return oferta;
        }


    }
}
